---@class GT.tech 科技
GT.tech = class()

function GT.tech:ctor()

end

--- 获取科技图标
---@param tech_key TechKey 科技编号
---@param target_level Int32 等级
---@return Texture
function GT.tech.api_get_tech_icon(tech_key, target_level)
    return game_api.api_get_tech_icon(tech_key, target_level)
end

--- 判断玩家科技类型前置条件满足需求
---@param player GT.player 玩家
---@param tech_key TechKey 科技类型
---@return Bool
function GT.tech.check_tech_key_precondition(player, tech_key)
    return game_api.check_tech_key_precondition(player.player, tech_key)
end

--- 获取科技最大等级
---@param tech_no TechKey 科技编号
---@return UInt32
function GT.tech.get_tech_max_level(tech_no)
    return game_api.get_tech_max_level(tech_no)
end

--- 最近升级科技
---@return TechKey
function GT.tech.get_last_upgraded_tech()
    return game_api.get_last_upgraded_tech()
end

--- 最近升降科技
---@return TechKey
function GT.tech.get_last_operated_tech()
    return game_api.get_last_operated_tech()
end

--- 最近变化科技
---@return TechKey
function GT.tech.get_last_changed_tech()
    return game_api.get_last_changed_tech()
end

--- 最近变化科技等级
---@return Int32
function GT.tech.get_last_changed_tech_level()
    return game_api.get_last_changed_tech_level()
end

--- 最近获得科技
---@return TechKey
function GT.tech.get_last_added_tech()
    return game_api.get_last_added_tech()
end

--- 最近失去科技
---@return TechKey
function GT.tech.get_last_removed_tech()
    return game_api.get_last_removed_tech()
end

--- 最近研究科技单位
---@return GT.unit
function GT.tech.get_last_upgrade_tech_unit()
    ---@type unit_data
    local data = {
        unit = game_api.get_last_upgrade_tech_unit()
    }
    return new(GT.unit, data)
end

--- 最近获得科技单位
---@return  GT.unit
function GT.tech.get_last_add_tech_unit()
    ---@type unit_data
    local data = {
        unit = game_api.get_last_add_tech_unit()
    }
    return new(GT.unit, data)
end

--- 最近失去科技单位
---@return  GT.unit
function GT.tech.get_last_remove_tech_unit()
    ---@type unit_data
    local data = {
        unit = game_api.get_last_remove_tech_unit()
    }
    return new(GT.unit, data)
end

--- 获取科技对应等级名字
---@param tech_no TechKey 科技编号
---@param level Int32 等级
---@return Str
function GT.tech.get_tech_name(tech_no, level)
    return game_api.get_tech_name(tech_no, level)
end

--- 获取科技对应等级icon
---@param tech_no TechKey 科技编号
---@param level Int32 等级
---@return Int32
function GT.tech.get_tech_icon(tech_no, level)
    return game_api.get_tech_icon(tech_no, level)
end

--- 获取科技对应等级的花费
---@param tech_no TechKey 科技编号
---@param level Int32 等级
---@return Int32
function GT.tech.get_tech_cost(tech_no, level)
    return game_api.get_tech_cost(tech_no, level)
end

--- 返回指定科技类型的名称
---@param tech_key TechKey 科技ID
---@return Str
function GT.tech.get_tech_name_by_type(tech_key)
    return game_api.get_tech_name_by_type(tech_key)
end

--- 返回指定科技类型的描述
---@param tech_key TechKey 科技ID
---@return Str
function GT.tech.get_tech_desc_by_type(tech_key)
    return game_api.get_tech_desc_by_type(tech_key)
end

--- 科技类型转字符串
---@param val TechKey 科技编号
---@return Str
function GT.tech.tech_key_to_str(val)
    return game_api.tech_key_to_str(val)
end

--- 字符串转科技类型
---@param val Str 字符串
---@return TechKey
function GT.tech.str_to_tech_key(val)
    return game_api.str_to_tech_key(val)
end